package com.asynctm.android.common.util;

import android.content.Context;
import android.content.DialogInterface;
import android.os.Environment;
import android.widget.Toast;

import com.asynctm.android.R;
import com.asynctm.android.socialnetwork.dao.FacebookDao;

/**
 * Utilidades de uso general para la aplicacion
 * 
 * @author rockdrigo
 */
public class ApplicationUtil {

	/**
	 * Muestra el dialogo de red no disponible
	 * 
	 * @param context
	 */
	public static void showNetworkUnavailableDialog(Context context) {
		showAlert(context, R.string.msg_network_unavailable);
	}

	/**
	 * Muestra el dialogo de servicio no disponible
	 * 
	 * @param context
	 */
	public static void showServiceUnavailableDialog(Context context) {
		showAlert(context, R.string.msg_service_unavailable);
	}

	/**
	 * Muestra el dialogo de informacion no disponible
	 * 
	 * @param context
	 */
	public static void showInfoNotFoundDialog(Context context) {
		showAlert(context, R.string.msg_info_not_found);
	}

	/**
	 * Muestra el dialogo de contactos no encontrados
	 * 
	 * @param context
	 */
	public static void showContactsNotFoundDialog(Context context) {
		showAlert(context, R.string.msg_no_contacts);
	}

	/**
	 * Muestra el dialogo de contactos no encontrados
	 * 
	 * @param context
	 * @param facebookDao
	 */
	public static void showShareOnFacebookDialog(Context context,
			final FacebookDao facebookDao) {

		DialogInterface.OnClickListener okButtonOnClickListener = new DialogInterface.OnClickListener() {

			public void onClick(DialogInterface dialog, int which) {

				switch (which) {
				case DialogInterface.BUTTON_POSITIVE:
					facebookDao.share();
					break;

				case DialogInterface.BUTTON_NEGATIVE:
					dialog.cancel();
					break;

				default:
					break;
				}

			}
		};

		AndroidUtil.showDialog(context, 1, "¿Compartir en Facebook?",
				context.getString(R.string.lbl_ok_dialog_button),
				context.getString(R.string.lbl_cancel_dialog_button), "",
				okButtonOnClickListener);

	}

	/**
	 * 
	 * @param context
	 * @param msgResourceId
	 */
	public static void showAlert(Context context, int msgResourceId) {
		AndroidUtil.showDialog(context, msgResourceId,
				R.string.lbl_ok_dialog_button,
				new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int which) {
					}
				});
	}
	
	/**
	 * Comprueba que la sd este conectada.
	 * 
	 * @param mContext
	 * @return booblean
	 */
	public static boolean comprobarSDCard(Context mContext) {
	    String auxSDCardStatus = Environment.getExternalStorageState();

	    if (auxSDCardStatus.equals(Environment.MEDIA_MOUNTED))
	        return true;
	    else if (auxSDCardStatus.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
	        Toast.makeText(
	                mContext,
	                "Warning, la tarjeta SDCard sólo se puede leer.\nEsto no impedirá el buen funcionamiento"
	                        + "de la aplicación de lectura", Toast.LENGTH_LONG)
	                .show();
	        return true;
	    } else if (auxSDCardStatus.equals(Environment.MEDIA_NOFS)) {
	        Toast.makeText(
	                mContext,
	                "Error, la tarjeta SDCard no se puede usar, no tiene un formato aceptado o no está "
	                        + "correctamente formateada.", Toast.LENGTH_LONG)
	                .show();
	        return false;
	    } else if (auxSDCardStatus.equals(Environment.MEDIA_REMOVED)) {
	        Toast.makeText(
	                mContext,
	                "Error, la tarjeta SDCard no se encuentra, para utilizar el lector necesita"
	                        + "insertar una tarjeta SD Card en el móvil.",
	                Toast.LENGTH_LONG).show();
	        return false;
	    } else if (auxSDCardStatus.equals(Environment.MEDIA_SHARED)) {
	        Toast.makeText(
	                mContext,
	                "Error, la tarjeta SDCard no está montada porque se está utilizando"
	                        + "conectada mediante USB. Desconectela y vuelva a intentarlo.",
	                Toast.LENGTH_LONG).show();
	        return false;
	    } else if (auxSDCardStatus.equals(Environment.MEDIA_UNMOUNTABLE)) {
	        Toast.makeText(
	                mContext,
	                "Error, la tarjeta SDCard no puede montarse.\nEsto puede deberse a que se encuentra corrupta"
	                        + "o dañada.", Toast.LENGTH_LONG).show();
	        return false;
	    } else if (auxSDCardStatus.equals(Environment.MEDIA_UNMOUNTED)) {
	        Toast.makeText(
	                mContext,
	                "Error, la tarjeta SDCard está presente en el móvil pero no está montada."
	                        + "Móntela antes de usar el programa.",
	                Toast.LENGTH_LONG).show();
	        return false;
	    }

	    return true;
	}

}
